iT邦幫忙

2021 iThome 鐵人賽

DAY 22
0
DevOps

k8s歷險記系列 第 22

Day22- 場地也能選? Field Selectors

  • 分享至 

  • xImage
  •  

前一章我們介紹了Labels 和 Selectors,知道說可以透過label來檢索k8s內的資源。不過除了透過label外,還能夠透過Field來進行檢索。

什麼是Field Selectors

顧名思義,能夠透過field讓你檢索k8s內的資源,透過一個或多個的resource fields,去查找k8s的資源物件。
像以下這些就是搜尋範例:

  1. metadata.name=my-service
  2. metadata.namespace!=default
  3. status.phase=Pending

例如這邊使用namespace不為default來查詢(記得要加-A 不然你就是在default namespace內 查namespace不為default的pod 不可能會有)

kubectl get pods -A --field-selector metadata.namespace!=default

那結果就會像下圖這樣
https://ithelp.ithome.com.tw/upload/images/20210930/20129607vYZbEu84oL.png

並且也支援多個resource type查詢

kubectl get pods,services -A --field-selector metadata.namespace!=default

結果如下:
https://ithelp.ithome.com.tw/upload/images/20210930/20129607ZktjpVXvOk.png

可以看到他會分兩段顯示符合條件的資源。

支援fields

能夠查哪些field,是看不同的Kubernetes resource type決定的,但是所有的resource type都支援兩種field:

  1. metadata.name
  2. metadata.namespace

假如你使用的是不支援的field,例如下面指令:

kubectl get ingress --field-selector foo.bar=baz

那就會跳出像下面的錯誤:

Error from server (BadRequest): Unable to find "networking.k8s.io/v1, Resource=ingresses" that match label selector "", field selector "foo.bar=baz": "foo.bar" is not a known field selector: only "metadata.name", "metadata.namespace"

告訴你說這裡面只有metadata.name和metadata.namespace。
不過跟label 和 Selectors不同,fields Selectors無法使用in ,notin 這種方式去檢索field,只能使用=, ==!=

目前k8s內常用的東西做了個簡單介紹了,下一章會開始介紹跟k8s有關的工具。


上一篇
Day21-又給人貼標籤 Labels and Selectors
下一篇
Day23-這不是火腿 helm介紹
系列文
k8s歷險記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言